Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

О возможности создавать стандартные и расширенные события (WingedFox)
Author Message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Sat Oct 13, 2007 4:31 pm ()
   Post subject:
Reply with quote


М

Выделено из темы «Динамическое присвоение события элементу страницы»,
расположенной в форуме Разное :: JavaScript (Ср, 17 Октября 2007, 14:17).
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Sat Oct 13, 2007 4:31 pm (спустя 1 секунду; написано за 2 минуты 52 секунды)
   Post subject:
Reply with quote

AKS
Событие это не только то, что создаётся движком браузера.

События можно создавать и самому, всё зависит от необходимости.
Как пример -- моя библиотека EventManager.
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Sat Oct 13, 2007 5:11 pm (спустя 39 минут; написано за 56 секунд)
   Post subject:
Reply with quote

WingedFox wrote:
Событие это не только то, что создаётся движком браузера.
Так я ведь уже о другом спрашиваю:
AKS wrote:
О какой именно модели событий здесь шла речь (вешать обработчики ... на любой полноценный объект яваскрипта)?
WingedFox wrote:
События можно создавать и самому, всё зависит от необходимости.
Как пример -- моя библиотека EventManager.
Там действительно реализована модель событий?
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Sat Oct 13, 2007 5:26 pm (спустя 15 минут; написано за 3 минуты 35 секунд)
   Post subject:
Reply with quote

Там реализована возможность создать своё событие, подписаться на него и запускать на обработку в нужные моменты.
Всё тот же старый пример: debugger.ru/demo/projects/browserextensions/demo/move.html
Code (JavaScript): скопировать код в буфер обмена
      var el = document.getElementById('bbb')
      EM.addEventListener(el, 'nodemovestart', function(e){ e.setMoveTarget(e.currentTarget)});
      EM.addEventListener(el, 'nodemove', function(e){
          var eo = DOM.getOffset(e.target);
          if (e.newOffsetY<=0) e.newOffsetY = 0;
          if (e.newOffsetX<=0) e.newOffsetX = 0;
          if (e.newOffsetX>=400) e.newOffsetX = 400;
          if (e.newOffsetY>=50) e.newOffsetY = 50;

      });
И код кастомного события:
debugger.ru/demo/projects/browserextensions/eventmanager/move.js

Насколько это подпадает под
AKS wrote:
модель событий
я не в курсе, но мне данный паттерн с момента реализации сэкономил достаточно много времени и кода.
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Tue Oct 16, 2007 8:54 pm (спустя 3 дня 3 часа 28 минут; написано за 5 минут 11 секунд)
   Post subject:
Reply with quote

Сегодня наконец-то "добрался" до move.js.
Drip-0.5 (blog.outofhanwell.com/2006/07/29/drip-05/) тут же показал, что код формирует печально известные memory leaks. "Доверяй (Drip'у), но проверяй" - посмотрел сам. Действительно, обработчики событий игнорируют "девиз":
Quote:
...for IE, to dereference event handlers and remove memory leaks
Пример - обработчик события onpropertychange для document так и висит, несмотря на попытку избавиться от него:
Code (JavaScript): скопировать код в буфер обмена
clearEvents(); // waster
 
WingedFox wrote:
мне данный паттерн с момента реализации сэкономил достаточно много времени и кода.
В своих скромных тестах мне удалось выяснить, что на document.onpropertychange нельзя расчитывать, как на событие, происходящее в момент готовности документа. Другими словами, могут возникнуть неприятности с document.body.appendChild. Следовательно, ваш domload имеет, как медаль, две стороны - может пригодиться, а может и вызвать ошибку.
Как это работает в ваших проектах?
WingedFox wrote:
...реализована возможность создать своё событие, подписаться на него и запускать на обработку в нужные моменты.
В коде можно увидеть все: "копирование", "замену", короче говоря, что угодно, но только не "создание события".
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Tue Oct 16, 2007 10:17 pm (спустя 1 час 22 минуты; написано за 3 минуты 38 секунд)
   Post subject:
Reply with quote

AKS
для создания события мне достаточно сделать
Code (JavaScript): скопировать код в буфер обмена
var evt = EM.registerEvent(window,'domload')
и для вызова обработчиков
Code (JavaScript): скопировать код в буфер обмена
evt.trigger(window);
AKS wrote:
В своих скромных тестах мне удалось выяснить
MSDN wrote:
Note For versions of Microsoft Internet Explorer 5 and later, the activeElement property is not defined until a document is loaded. A value of null is given for this property, if it is accessed inline during the loading of a document. This property can be accessed in the onload event handler function.
В вольном переводе это означает, что свойство выставляется ровно в тот же момент, что и срабатывание DOMContentLoaded.

msdn2.microsoft.com/en-us/library/ms533065.aspx

PS: предлагаю свернуть обсуждение кошерности методов создания событий.
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Wed Oct 17, 2007 10:12 am (спустя 11 часов 55 минут; написано за 4 минуты 29 секунд)
   Post subject:
Reply with quote

WingedFox wrote:
В вольном переводе это означает...
Вольный перевод может неплохо прозвучать за чашкой кофе или во время перекура. Я же предлагаю "пощупать" это все своими руками. Откройте вот это документ в IE:
Code (html): скопировать код в буфер обмена
< (december.com/html/4/element/.html)?xml version="1.0" encoding="UTF-8"?> (december.com/html/4/element/.html)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
      "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html (december.com/html/4/element/html.html) xmlns="http://www.w3.org/1999/xhtml"> (december.com/html/4/element/.html)
<head> (december.com/html/4/element/head.html)
<meta (december.com/html/4/element/meta.html) http-equiv="content-type" content="text/html; charset=UTF-8" /> (december.com/html/4/element/.html)
<title> (december.com/html/4/element/title.html)title</title>
<meta (december.com/html/4/element/meta.html) name="generator" content="Amaya, see http://www.w3.org/Amaya/" /> (december.com/html/4/element/.html)
<script (december.com/html/4/element/script.html) type='text/javascript'> (december.com/html/4/element/.html)
/*< (december.com/html/4/element/.html)![CDATA[*/
 
document.attachEvent('onpropertychange', function (e) {
    window.status = e.propertyName + ',' + document.readyState;
});

/*]]> (december.com/html/4/element/.html)
*/
</script>
</head>
<body> (december.com/html/4/element/body.html)
    <div> (december.com/html/4/element/div.html)
        <img (december.com/html/4/element/img.html) src='http://www.nasa.gov/images/content/84857main_EC04-0325-23_lg.jpg'
            width='300' height='300' alt='' /> (december.com/html/4/element/.html)

    </div>
</body>
</html>
Если у Вас в строке состояния браузера будет тоже, что и у меня (activeElement, interactive), то можно будет продолжить и попытаться "вольно" перевести значение interactive:
Quote:
User can interact with the object even though it is not fully loaded.
Возможно некоторую ясность сможет внести трактовка этого состояния для xml-документа (думаю, что они очень схожи):
Quote:
Some data has been read and parsed, and the object model is now available on the partially retrieved data set. Although the object model is available during this state, it is read-only.
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Wed Oct 17, 2007 1:40 pm (спустя 3 часа 27 минут; написано за 1 минуту 27 секунд)
   Post subject:
Reply with quote

AKS
1. данные замечания никоим образом не относятся к паттерну событийной модели
2. проблемы надо решать при поступлении конкретных тест-кейсов для их воспроизведения
3. голая теория меня мало интересует

надеюсь, на этом данный топик может быть закрыт.
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Wed Oct 17, 2007 3:18 pm (спустя 1 час 38 минут; написано за 59 секунд)
   Post subject:
Reply with quote

WingedFox wrote:
данные замечания никоим образом не относятся к паттерну событийной модели
Это напрямую связано с вашей моделью. Я Вам пишу о том, какую угрозу таит в себе ваш "domload" в IE. А приводит он не просто к сообщению об "ошибке в сценарии" - IE вообще не грузит страницу, сообщая, что "операция прервана" (Вы прекрасно знакомы с этим поведением IE).
WingedFox wrote:
проблемы надо решать при поступлении конкретных тест-кейсов для их воспроизведения
Я протестировал ваш "менеджер событий", затем доложил о результатах. Тест-кейс у меня под рукой, но сейчас он окажется в корзине, поскольку сдается мне, что помощь в отладке сценария - дело неблагодарное.
WingedFox wrote:
голая теория меня мало интересует
Мне тоже мало одной "голой" теории. Именно поэтому я произвел кое-какие тесты, а также попытался найти подтверждение их результатов в стандартной информации.
WingedFox wrote:
...на этом данный топик может быть закрыт.
Вам веднее - ведь Вы вспомнили про свой "менеджер событий", не я.
Back to top
View user's profile Send private message Send e-mail
An6rey
Участник форума



Joined: 30 Aug 2007
Posts: 69
Карма: 3
   поощрить/наказать


PostPosted: Wed Oct 17, 2007 3:31 pm (спустя 12 минут; написано за 3 минуты 23 секунды)
   Post subject:
Reply with quote

Я думаю все "самопальные" роутеры событий - это самообман. Паттерну Publish/Subscribe - эти роутеры не соответствуют. Посколько фактически к некоторому объекту привязывается новая функция и она же где-то в коде вызывается. Немного напоминает Smalltalk.
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Wed Oct 17, 2007 3:34 pm (спустя 2 минуты; написано за 4 минуты 53 секунды)
   Post subject:
Reply with quote

AKS
Приведите конкретный живой пример, как воспроизвести эту ошибку, используя мой код.
Тогда будет о чём говорить.
Это событие используется в нескольких проектах, которые проходят полный цикл тестирования UI раз в несколько недель. Пока что, сообщений о подобной ошибке нет.

Чтобы закрыть сей багрепорт (построенный исключительно на умозаключениях) посмотрите, когда меняется interactve на completed
Code (html): скопировать код в буфер обмена
< (december.com/html/4/element/.html)?xml version="1.0" encoding="UTF-8"?> (december.com/html/4/element/.html)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
      "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html (december.com/html/4/element/html.html) xmlns="http://www.w3.org/1999/xhtml"> (december.com/html/4/element/.html)
<head> (december.com/html/4/element/head.html)
<meta (december.com/html/4/element/meta.html) http-equiv="content-type" content="text/html; charset=UTF-8" /> (december.com/html/4/element/.html)
<title> (december.com/html/4/element/title.html)title</title>
<meta (december.com/html/4/element/meta.html) name="generator" content="Amaya, see http://www.w3.org/Amaya/" /> (december.com/html/4/element/.html)
<script (december.com/html/4/element/script.html) type='text/javascript'> (december.com/html/4/element/.html)
/*< (december.com/html/4/element/.html)![CDATA[*/
 
setInterval(function (e) {
    window.status = document.readyState;
},50);

/*]]> (december.com/html/4/element/.html)
*/
</script>
</head>
<body> (december.com/html/4/element/body.html)
    <div> (december.com/html/4/element/div.html)
        <img (december.com/html/4/element/img.html) src='http://www.nasa.gov/images/content/84857main_EC04-0325-23_lg.jpg'
            width='300' height='300' alt='' /> (december.com/html/4/element/.html)

    </div>
</body>
</html>
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Wed Oct 17, 2007 3:41 pm (спустя 7 минут; написано за 1 минуту 43 секунды)
   Post subject:
Reply with quote

An6rey
Ну так не самообманывайтесь =)
Никто же не пропагандирует его как панацею =)
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Wed Oct 17, 2007 5:57 pm (спустя 2 часа 15 минут; написано за 11 минут 4 секунды)
   Post subject:
Reply with quote

WingedFox wrote:
Приведите конкретный живой пример, как воспроизвести эту ошибку, используя мой код.
Проверьте событие domload в IE на документе со сложной структурой (вложенные таблицы, большое кол-во мелких изображений).
WingedFox wrote:
Тогда будет о чём говорить.
Написал ведь я, что у Вас не работает удаление обработчиков событий (хотя Вы считали, что работает), и что? "Говорить не о чем"...
WingedFox wrote:
Чтобы закрыть сей багрепорт (построенный исключительно на умозаключениях) посмотрите, когда меняется interactve на completed
Мне хорошо известно, когда и что меняется. А вот Вы так и не поняли, для чего я сам Вам предложил этот пример.
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Wed Oct 17, 2007 6:06 pm (спустя 9 минут; написано за 4 минуты 36 секунд)
   Post subject:
Reply with quote

AKS
Работа тестера вообще неблагодарна, если он "предлагает примеры"...
У разработчиков нет ни малейшего желания разбираться в теоретических изысках. Привыкайте.

Как только у меня появится багрепорт, что с текущей реализацией domload есть реальные проблемы (живая HTML страница, готорая не работает при использовании моего кода), тогда и будет о чём говорить.

PS: у меня тот же самый Drip-0.5 никакой утечки не показывает.
PPS: самая большая страница, на которой работает библиотека весит почти мегабайт и состоит из бааальшой кучи таблиц и форм.
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Wed Oct 17, 2007 6:32 pm (спустя 25 минут; написано за 2 минуты 37 секунд)
   Post subject:
Reply with quote

WingedFox wrote:
Работа тестера вообще неблагодарна...
Спасибо, теперь буду знать.
WingedFox wrote:
Привыкайте.
Любой вменяемый человек в данной ситуации сделает вывод, что, как раз наоборот, НЕ надо привыкать (а если вдруг немного привык, то пора отвыкать).
WingedFox wrote:
у меня тот же самый Drip-0.5 никакой утечки не показывает
У меня тоже не показывает, если я закомментирую вызовы EM.addEventListener.
WingedFox wrote:
самая большая страница, на которой работает библиотека весит почти мегабайт и состоит из бааальшой кучи таблиц и форм.
В момент domload есть вызов document.body.appendChild?
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Wed Oct 17, 2007 11:18 pm (спустя 4 часа 45 минут; написано за 1 минуту 21 секунду)
   Post subject:
Reply with quote

AKS wrote:
В момент domload есть вызов document.body.appendChild?
Да.
1. генерация управляющих контролов для таблиц
2. отрисовка всяких рюшечек типа "loading"
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Thu Oct 18, 2007 8:13 am (спустя 8 часов 55 минут; написано за 51 секунду)
   Post subject:
Reply with quote

Наверно возникновение ошибки зависит от разметки. Короче говоря, раз на раз не приходится.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML